Ch1. 스코프란 무엇인가
스코프란 변수를 어떻게 선언하고, 어떻게 참조할지를 정하는 규칙이다.
1.1 컴파일러 이론
자바스크립트는 인터프리터 언어지만 실행 전 다음 3단계를 수행한다:
- Tokenizing / Lexing: 의미 있는 단위(Token)로 코드 분해
- Parsing: AST(추상 구문 트리) 생성
- Code Generation: 실행 가능한 코드 생성
→ 이 과정을 통해 컴파일하고 실행
1.2 스코프 이해하기
실행 주체들
- 엔진: 실행 책임
- 컴파일러: 파싱/코드 생성 담당
- 스코프: 변수 저장 및 참조 규칙 관리
var a = 2;
- 컴파일러:
a선언 처리 - 엔진:
a = 2실행
LHS vs RHS
- LHS (Left-Hand Side): 대입 대상 변수 컨테이너 찾기
- RHS (Right-Hand Side): 변수 값 읽기
a = 2; // a → LHS
console.log(a) // a → RHS
예제 분석
function foo(a) {
var b = a;
return a + b;
}
var c = foo(2);
- LHS 검색: a (파라미터), b, c
- RHS 검색: foo, a, b, a, b
1.3 중첩 스코프
function foo(a) {
console.log(a, b);
}
var b = 2;
foo(3);
a: 함수 내부에서 찾음b: 없으니 외부 스코프에서 찾음- 최종적으로 글로벌 스코프까지 찾음
1.4 오류
- RHS 실패:
ReferenceError(변수 없음) - LHS 실패: 암묵적으로 글로벌 변수 생성 (strict mode에서는
ReferenceError) - 존재하지만 잘못 사용:
TypeError
x; // ReferenceError
x = 3; // 글로벌 변수 생성됨 (비엄격 모드)
null.f(); // TypeError
1.5 정리
- 스코프는 변수 선언/참조 규칙을 정의한다
- 자바스크립트는 실행 전 컴파일 단계를 거친다
- LHS vs RHS 개념을 명확히 구분해야 한다
- strict mode에서는 암묵적 글로벌 변수 생성을 방지할 수 있다